package com.its.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.its.pojo.HupRegion;
import com.its.mapper.HupRegionMapper;
import com.its.service.HupRegionService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Locale;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 朱厚强
 * @since 2023年12月27日
 */
@Service
@Slf4j
public class HupRegionServiceImpl extends ServiceImpl<HupRegionMapper, HupRegion> implements HupRegionService {
    @Autowired
    private HupRegionMapper mapper;
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 同步省市地区信息
     * 存储类型为 hash 存储格式如下
     * # province(行省):0 -- 省信息
     * # Provice:(省id) -- 市信息
     * # Provice:(省id) :(市id) -- 区信息
     * -- 市信息
     * @return
     */
    @Override
    public Boolean synchronizationArea() {
        try {
            // 查询省
            List<HupRegion> provinceList = getRegion(0);
            // 循环添加信息
            provinceList.forEach(province ->{
                // 存储省信息
                redisTemplate.opsForHash().put("region:0",province.getId().toString(),province);
                // 查询市
                List<HupRegion> cityList = getRegion(province.getId());
                cityList.forEach(city ->{
                    // 存储市信息
                    redisTemplate.opsForHash().put("region:"+province.getId(),city.getId().toString(),city);
                    // 查询区
                    List<HupRegion> districtList = getRegion(city.getId());
                    districtList.forEach(district ->{
                        // 存储区信息
                        redisTemplate.opsForHash().put("region:"+city.getId(),district.getId().toString(),district);
                    });
                });
            });
            log.info("数据同步到Redis成功");
        } catch (Exception e) {
            log.error("同步数据到Redis或查询MySQL数据库时出错：" + e.getMessage());
            return false;
        }
        return true;
    }

    @Override
    public List<HupRegion> getRegion(Integer pid) {
        LambdaQueryWrapper<HupRegion> warpper = new LambdaQueryWrapper<>();
        // 查询所有的省份
        warpper.eq(HupRegion::getPid,pid);
        return mapper.selectList(warpper);
    }

    /**
     * 根据键去获取redis中的数据
     * @param key 键
     * @return
     */
    @Override
    public List<String> getAreaForRedis(String key) {
        return redisTemplate.opsForHash().values("region:" + key);
    }


}
